package org.example.demo1.utils;

import java.util.regex.Pattern;

public class ChineseIdentifierUtils {

    // 邮箱正则表达式 (简化版但覆盖大多数情况)
    private static final String EMAIL_REGEX = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
    private static final Pattern EMAIL_PATTERN = Pattern.compile(EMAIL_REGEX);

    // 中国大陆手机号正则表达式 (11位，1开头，第二位3-9)
    private static final String CHINA_PHONE_REGEX = "^1[3-9]\\d{9}$";
    private static final Pattern PHONE_PATTERN = Pattern.compile(CHINA_PHONE_REGEX);

    /**
     * 判断字符串是邮箱、国内手机号还是其他类型
     * @param input 待检测的字符串
     * @return 枚举类型结果
     */
    public static IdentifierType identify(String input) {
        if (input == null || input.trim().isEmpty()) {
            return IdentifierType.INVALID;
        }

        String trimmedInput = input.trim();

        if (isEmail(trimmedInput)) {
            return IdentifierType.EMAIL;
        } else if (isChinesePhoneNumber(trimmedInput)) {
            return IdentifierType.PHONE;
        } else {
            return IdentifierType.OTHER;
        }
    }

    /**
     * 检查字符串是否是有效邮箱
     */
    public static boolean isEmail(String email) {
        return email != null && EMAIL_PATTERN.matcher(email).matches();
    }

    /**
     * 检查字符串是否是有效的中国大陆手机号
     */
    public static boolean isChinesePhoneNumber(String phone) {
        return phone != null && PHONE_PATTERN.matcher(phone).matches();
    }

    /**
     * 标识类型枚举
     */
    public enum IdentifierType {
        EMAIL,      // 邮箱
        PHONE,      // 中国大陆手机号
        OTHER,      // 其他类型
        INVALID     // 无效输入
    }

    // 测试用例
    public static void main(String[] args) {
        String[] testCases = {
                "test@example.com",    // 邮箱
                "13800138000",         // 有效手机号
                "12345678901",         // 无效手机号(第二位为2)
                "16800138000",         // 无效手机号(首位为1但第二位不对)
                "invalid.string",      // 其他
                "",                    // 空字符串
                null                   // null
        };

        for (String testCase : testCases) {
            IdentifierType type = identify(testCase);
            System.out.printf("输入: %-15s 类型: %s%n",
                    testCase != null ? testCase : "null",
                    type);
        }
    }
}
